package org.ee.core.util;

/**
 * 对象判断工具
 * @Author jokr
 * @Date 2025/8/26 下午1:36
 */
import java.util.Collection;
import java.util.Map;
import java.util.Date;

public class ObjectUtil {

    // 判断对象是否为 null 或者为空
    public static boolean isEmpty(Object obj) {
        if (obj == null) {
            return true;
        }

        if (obj instanceof CharSequence) {
            return ((CharSequence) obj).length() == 0;
        } else if (obj instanceof Collection) {
            return ((Collection<?>) obj).isEmpty();
        } else if (obj instanceof Map) {
            return ((Map<?, ?>) obj).isEmpty();
        } else if (obj instanceof Object[]) {
            return ((Object[]) obj).length == 0;
        }

        return false;
    }

    // 判断对象是否非空
    public static boolean isNotEmpty(Object obj) {
        return !isEmpty(obj);
    }

    // 判断对象是否为 null
    public static boolean isNull(Object obj) {
        return obj == null;
    }

    // 判断对象是否不为 null
    public static boolean isNotNull(Object obj) {
        return obj != null;
    }

    // 判断字符串是否为空或 null
    public static boolean isEmpty(String str) {
        return str == null || str.trim().isEmpty();
    }

    // 判断字符串是否不为空
    public static boolean isNotEmpty(String str) {
        return !isEmpty(str);
    }

    // 判断数字是否为 0
    public static boolean isZero(Number num) {
        return num != null && num.doubleValue() == 0;
    }

    // 判断数字是否不为 0
    public static boolean isNotZero(Number num) {
        return num != null && num.doubleValue() != 0;
    }

    // 判断日期是否为空
    public static boolean isEmptyDate(Date date) {
        return date == null;
    }

    // 判断日期是否有效
    public static boolean isValidDate(Date date) {
        return date != null && date.getTime() > 0;
    }

    // 判断对象是否是某个类型的实例
    public static boolean isInstanceOf(Object obj, Class<?> clazz) {
        return clazz != null && clazz.isInstance(obj);
    }

    // 判断数组是否为空
    public static boolean isEmptyArray(Object[] array) {
        return array == null || array.length == 0;
    }

    // 判断数组是否包含空元素
    public static boolean hasNullElement(Object[] array) {
        if (array == null) {
            return true;
        }
        for (Object element : array) {
            if (element == null) {
                return true;
            }
        }
        return false;
    }

    // 判断集合是否包含空元素
    public static boolean hasNullElement(Collection<?> collection) {
        if (collection == null) {
            return true;
        }
        for (Object element : collection) {
            if (element == null) {
                return true;
            }
        }
        return false;
    }

    // 判断字符串是否只包含数字
    public static boolean isNumeric(String str) {
        if (str == null) {
            return false;
        }
        return str.matches("[0-9]+");
    }

    // 判断字符串是否为正整数
    public static boolean isPositiveInteger(String str) {
        if (str == null) {
            return false;
        }
        return str.matches("[1-9][0-9]*");
    }


}
